/* 
 * File:   Robot.h
 * Author: Piotrek
 *
 * Created on 2 maj 2010, 23:57
 */

#ifndef _ROBOT_H
#define	_ROBOT_H

#include "Module.h"
#include "CylinderedModule.h"
#include "RAPID/RAPID.H"
#include "StaticObject.h"
#include <vector>

/**
 * @brief Klasa reprezentujaca calego robota,
 * dziedziczy po klasie StaticObject reprezentujacej obiekt statyczny.
 */
class Robot : public StaticObject {
public:

	float PositionsBuffer[8];

    std::vector<CylinderedModule> cylinderedModules;

    /**
     * @param name  nazwa robota "kawasaki"/"mitsubishi"
     */
    Robot(char * name);

    /**
     * @brief Translacja modułów robota do punktu (0,0,0), niezbędne dla modelu kawasaki.
     * @note funkcja dedykowana dla modelu kawasaki
     */
    void translateModulesToBase();

    /**
     * @brief Transformacja modułów robota
     *
     * @param updateModule   parametr okreslejacy najnizszy modul do transformacji - nalezy przetransformowac ten i wszystkie moduly powyzej     
     */
    void transform(int updateModule);
    
	void updatePositions();

    // cylindry:
    void translateCylModules();

private:

};


extern Robot * kawasaki;
extern Robot * mitsubishi;

#endif	/* _ROBOT_H */

